3. 卷積計算與其DSP物理意義


Posted by 高肥 on 2022-06-17

3. 卷積計算與其DSP物理意義

3.1 卷積 (Convolution)定義

給定數位訊號 $x\lbrack n\rbrack$ 與 $h\lbrack n\rbrack$
則:
$$
\begin{aligned}
y\lbrack n\rbrack & = x\lbrack n\rbrack\ast h\lbrack n\rbrack\\
& = \sum_{k=-\infty}^\infty x\lbrack k\rbrack\cdot h\lbrack n-k\rbrack\\
& = \sum_{k=-\infty}^\infty h\lbrack k\rbrack\cdot x\lbrack n-k\rbrack
\end{aligned}
$$

Convolution計算示意圖

3.2 Convolution的DSP物理意義

根據上圖我們可以想像為一個數位訊號 $x\lbrack n\rbrack$輸入到一個DSP系統$h\lbrack n\rbrack$,

經由DSP系統的計算產生輸出$y\lbrack n\rbrack$。

Convolution在DSP的物理意義:訊號經由系統運算所產生的訊號

3.3 Convolution的衍生 ⇒ 系統脈衝響應 (System Impulse Response)定義

參考ch1的內容

任意的訊號可以以表示成

$x\lbrack n\rbrack=\sum_{k=-\infty}^\infty x\lbrack k\rbrack\cdot\delta\lbrack n-k\rbrack$

是不是跟卷積有點像呢!!

帶入ch2中DSP系統的定義

$
\begin{aligned}
y\lbrack n\rbrack & = T\{x\lbrack n\rbrack\}\\
& = T\{\sum_{k=-\infty}^\infty x\lbrack k\rbrack\cdot\delta\lbrack n-k\rbrack\}\\
& = \sum_{k=-\infty}^\infty x\lbrack k\rbrack\cdot T\{\delta\lbrack n-k\rbrack\}
\end{aligned}
$

比對Convolution的定義,發現

$h\lbrack n-k\rbrack=T\{\delta\lbrack n-k\rbrack\}$

根據線性非時變 (LTI)的性質

$h\lbrack n\rbrack=T\{\delta\lbrack n\rbrack\}$

根據上圖

存在一個DSP系統 $T{\cdot}$

當輸入 $x\lbrack n\rbrack$ 訊號,產生輸出 $y\lbrack n\rbrack$

當輸入 $\delta\lbrack n\rbrack$ 訊號,產生輸出 $h\lbrack n\rbrack$

而$\delta\lbrack n\rbrack$是一個單位脈衝 (Unit Impulse)輸入

產生的$h\lbrack n\rbrack$有一個專有名詞: 脈衝響應 (Impulse Response)

備註: 響應 (Response)這個詞在DSP中描述系統的輸出,就只是一個響亮、高大上的名稱而已。

後續還會講到一個頻率響應 (Frequency Response),一樣在講系統的輸出,只是它在分析系統在各種不同頻率輸入之下會有甚麼表現。

3.4 卷積的代數性質

3.4.1 交換率

$
\begin{aligned}
y\lbrack n\rbrack & = x\lbrack n\rbrack\ast h\lbrack n\rbrack\\
& = h\lbrack n\rbrack\ast x\lbrack n\rbrack
\end{aligned}
$

3.4.2 結合率

$
\begin{aligned}
y\lbrack n\rbrack & = h_1\lbrack n\rbrack\ast h_2\lbrack n\rbrack\ast x\lbrack n\rbrack\\
& = (h_1\lbrack n\rbrack\ast h_2\lbrack n\rbrack)\ast x\lbrack n\rbrack\\
& = h_1\lbrack n\rbrack\ast(h_2\lbrack n\rbrack\ast x\lbrack n\rbrack)
\end{aligned}
$

3.4.3 分配率

$
\begin{aligned}
y\lbrack n\rbrack & = (h_1\lbrack n\rbrack+h_2\lbrack n\rbrack)\ast x\lbrack n\rbrack\\
& = h_1\lbrack n\rbrack\ast x\lbrack n\rbrack+h_2\lbrack n\rbrack\ast x\lbrack n\rbrack
\end{aligned}
$

3.5 卷積的應用 — 濾波器

Convolution是DSP的核心技術,最基本的應用就是訊號的濾波 (Filtering)。

此情況下,前面所提到的脈衝響應$h\lbrack n\rbrack$,就是濾波器 (Filter)。

在此介紹一個最簡單的平均濾波器

平均濾波器 (Average Filter)

平均濾波器可定義為
$$h\lbrack n\rbrack=\frac1M\{1,\;1,\;\dots,\;1\},\;n=0,\;1,\;\dots,\;(M-1)$$
其中 $M$ 為濾波器的大小

平均濾波器範例

若輸入訊號為$x=\{1,\;2,\;4,\;3,\;2,\;1,\;1\},\;n=0,\;1,\;\dots,\;6$
使用平均濾波器,濾波器大小為3,求輸出的數位訊號。

範例解答

$x=\{1,\;\frac73,\;3,\;3,\;2,\;\frac43,\;\frac23\},\;n=0,\;1,\;\dots,\;6$

平均濾波器程式範例

import numpy as np
import numpy.random as random
import matplotlib.pyplot as plt

t = np.linspace( 0, 1, 200, endpoint = False )      
x = 10 * np.cos( 2 * np.pi * 5 * t ) + random.uniform ( -5, 5, 200 )
h = np.ones( 7 ) / 7
y = np.convolve( x, h, 'same' )

plt.figure( 1 )
plt.plot( t, x )
plt.xlabel( 't (second)' )
plt.ylabel( 'Amplitude' )

plt.figure( 2 )
plt.plot( t, y )
plt.xlabel( 't (second)' )
plt.ylabel( 'Amplitude' )

plt.show( )

Ref:


#Signal_Processing #DSP_Class







Related Posts

Day07:V8 bytecode 系列文總結

Day07:V8 bytecode 系列文總結

JavaScript 實作 Array Shuffle

JavaScript 實作 Array Shuffle

關於 React 小書:將 JSX 傳入函式,再把回傳的 JSX 放到頁面

關於 React 小書:將 JSX 傳入函式,再把回傳的 JSX 放到頁面


Comments